package br.com.atibrasil.model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@Entity
@NamedQueries({ 
	@NamedQuery(name = "MenuItem.findByVisibility", query = "SELECT m FROM MenuItem m WHERE m.visivel = true and m.grupo.id = ?1 order by m.ordem"),
	@NamedQuery(name = "MenuItem.findAllVisible", query = "SELECT m FROM MenuItem m WHERE m.visivel = true order by m.descricao")	
})
@Table(name="menu_item")
public class MenuItem implements Serializable{
	private static final long serialVersionUID = 1L;
	public static final int SWING = 1;	
	public static final int JAVA_FX = 2;	
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int id;
	
	private String descricao;
	
	private String classe;
	
	@Column(name="tecla_atalho")
	private String teclaAtalho;
	
	private int ordem;
	
	@Column(name="parametro_inicial")	
	private String parametro;
	
	@Column(name="imagem")	
	private String imagem;	
	
	private boolean visivel;
	
	@Column(name="tipo_interface")	
	private int tipoInterface;
	
	@ManyToOne
	@JoinColumn(name="id_grupo")
	private MenuGrupo grupo;	
	
    @ManyToMany(mappedBy="listaItens")
    private List<Perfil> listaPerfis;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}	

	public String getClasse() {
		return classe;
	}

	public void setClasse(String classe) {
		this.classe = classe;
	}		

	public String getTeclaAtalho() {
		return teclaAtalho;
	}

	public void setTeclaAtalho(String teclaAtalho) {
		this.teclaAtalho = teclaAtalho;
	}		

	public String getParametro() {
		return parametro;
	}

	public void setParametro(String parametro) {
		this.parametro = parametro;
	}

	public int getOrdem() {
		return ordem;
	}

	public void setOrdem(int ordem) {
		this.ordem = ordem;
	}

	public boolean isVisivel() {
		return visivel;
	}

	public void setVisivel(boolean visivel) {
		this.visivel = visivel;
	}

	public MenuGrupo getGrupo() {
		return grupo;
	}

	public void setGrupo(MenuGrupo grupo) {
		this.grupo = grupo;
	}

	public String getImagem() {
		return imagem;
	}

	public void setImagem(String imagem) {
		this.imagem = imagem;
	}

	public int getTipoInterface() {
		return tipoInterface;
	}

	public void setTipoInterface(int tipoInterface) {
		this.tipoInterface = tipoInterface;
	}

	public List<Perfil> getListaPerfis() {
		return listaPerfis;
	}

	public void setListaPerfis(List<Perfil> listaPerfis) {
		this.listaPerfis = listaPerfis;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		MenuItem other = (MenuItem) obj;
		if (id != other.id)
			return false;
		return true;
	}	
}
